home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / machine / arabian.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  2KB  |  70 lines

  1. /***************************************************************************
  2.  
  3.   machine.c
  4.  
  5.   Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
  6.   I/O ports)
  7.  
  8. ***************************************************************************/
  9.  
  10. #include "driver.h"
  11.  
  12. static UINT8 arabian_clock=0;
  13. static int portB=0;
  14.  
  15.  
  16. int arabian_interrupt(void)
  17. {
  18.     arabian_clock++;
  19.     return interrupt();
  20. }
  21.  
  22.  
  23. WRITE_HANDLER( arabian_portB_w )
  24. {
  25.     int pc;
  26.     static int last;
  27.  
  28.     portB = data;
  29.  
  30.     pc = cpu_get_pc();
  31.     if ((pc == 0x0a7a) || (pc == 0x002a)) pc = cpu_geturnpc();
  32.     if ((data & 0xec) != last) logerror("Port B written  %02X  PC=%04X\n",data,pc);
  33.     last = data & 0xec;
  34.  
  35.     coin_counter_w(0, ~data & 0x01);
  36.     coin_counter_w(1, ~data & 0x02);
  37. }
  38.  
  39. READ_HANDLER( arabian_input_port_r )
  40. {
  41.     int pom;
  42.  
  43.  
  44.     if (portB & 0x10)  /* if 1 read the switches */
  45.     {
  46.         switch(offset)
  47.         {
  48.         case 0:  pom = readinputport(2); break;
  49.         case 1:  pom = readinputport(3); break;
  50.         case 2:  pom = readinputport(4); break;
  51.         case 3:  pom = readinputport(5); break;
  52.         case 4:  pom = readinputport(6); break;
  53.         case 5:  pom = readinputport(7); break;
  54.         case 6:  pom = arabian_clock >> 4; break;
  55.         case 8:  pom = arabian_clock & 0x0f; break;
  56.         default:
  57.             logerror("Input Port %04X read.  PC=%04X\n", offset+0xd7f0, cpu_get_pc());
  58.             pom = 0;
  59.             break;
  60.         }
  61.     }
  62.     else  /* if bit 4 of AY port 0f==0 then read RAM memory instead of switches */
  63.     {
  64.         unsigned char *RAM = memory_region(REGION_CPU1);
  65.         pom = RAM[ 0xd7f0 + offset ];
  66.     }
  67.  
  68.     return pom;
  69. }
  70.